/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.atps.entidade;

import br.com.util.DateUtil;
import java.util.Date;

/**
 *
 * @author fab.3226019666
 */
public class Locatario {

    public Locatario() {
        this.numDiaria = 0;
        this.ocupado = false;
    }

    public Locatario(String nome, int numPessoas, int numDiaria, Date entrada, Date saida) {
        this.nome = nome;
        this.numPessoas = numPessoas;
        this.numDiaria = numDiaria;
        this.entrada = entrada;
        this.saida = saida;
        this.ocupado = false;
    }
    /*
     * Atributos de um Locatário
     */
    private String nome;
    private int numPessoas;
    private int numDiaria;
    private Date entrada;
    private Date saida;
    private boolean ocupado;
    public static double valorDiaria;
    

    /**
     * Metodo que retorna o valor de diarias de acordo com a data inicial e
     * final Esse metodo seria melhor impregado, caso fosse implementado uma
     * classe entre o modelo (Locatario.java) e a Visão (AgenciaTurismo.java).
     *
     * @return numeros de Diarias
     */
    public int getNumDiaria() {
        int aux = 0;//contador

        if (entrada == null || saida == null) { // Testa se os parametros de
            return numDiaria;                   // entrada foram passados
        } else {
            aux = DateUtil.diff(entrada, saida);// Faz o calculo da diferença.
            if (DateUtil.isAposMeioDia(saida)) {// Conforme a regra, caso saia
                aux++;                          // após o meio dia, conte mais 
            }                                   // uma diaria 

            if (!DateUtil.isAposMeioDia(entrada)) {// Conforme a regra, caso saia
                aux++;                          // após o meio dia, conte mais 
            }                                   // uma diaria 

        }
        setNumDiaria(aux); // insere a quantidade de diarias
        return numDiaria;
    }

    /**
     * Metodo que imprimi o valor do objeto instanciado de Locatario. Aqui
     * utilizado para retornar o valor calculado do recibo
     *
     * @return recibo
     */
    @Override
    public String toString() {
        String linha = "=================================================\n";
        String locat = "Locatario: " + getNome() + "\n";
        String dataE = "Data e Horario de entrada: " + DateUtil.getStringFromDate(entrada, DateUtil.formatoBR) + "mim\n";
        String dataS = "Data e Horario de saida: " + DateUtil.getStringFromDate(saida, DateUtil.formatoBR) + "mim\n";
        String diarias = "Número de diarias: " + getNumDiaria() + "\n";
        String totalDevido = "Total devido: " + (getNumDiaria() * getNumPessoas() * getValorDiaria() + "\n");
        String recibo = linha + locat + dataE + dataS + diarias + totalDevido + linha;
        return recibo;
    }

    /**
     * Quem define o numero de diarias e o proprio locatario por isso o ele é
     * private
     *
     * @param numDiaria
     */
    private void setNumDiaria(int numDiaria) {
        this.numDiaria = numDiaria;
    }

    /**
     * Metodo para retornar o valor da Diaria
     *
     * @return valor da daria
     */
    public static double getValorDiaria() {
        return valorDiaria;
    }

    /**
     * Metodo estático para definir o valor da diaria para todas as instancias
     * de locatario
     *
     * @param valorDiaria
     */
    public static void setValorDiaria(double valorDiaria) {
        if (valorDiaria > 0.0) {
            Locatario.valorDiaria = valorDiaria;
        }
    }

    public boolean isOcupado() {
        return ocupado;
    }

    public void setOcupado(boolean ocupado) {
        this.ocupado = ocupado;
    }

    
    //Os metodos de acesso comuns.
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getNumPessoas() {
        return numPessoas;
    }

    public void setNumPessoas(int numPessoas) {
        this.numPessoas = numPessoas;
    }

    public Date getEntrada() {
        return entrada;
    }

    public void setEntrada(Date entrada) {
        this.entrada = entrada;
    }

    public Date getSaida() {
        return saida;
    }

    public void setSaida(Date saida) {
        this.saida = saida;
    }
}
